package com.itheima.controller;

import com.itheima.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.ArrayList;
import java.util.List;

@Controller
public class AjaxController {

    @RequestMapping("/ajaxController")
    //使用@RequestBody注解，可以将请求体内容封装到指定参数中
    public String ajaxController(@RequestBody String message) {
        System.out.println("ajax request is running..." + message);
        return "page.jsp";
    }

    ////注意：POJO中的属性如果请求数据中没有，属性值为null，POJO中没有的属性如果请求数据中有，不进行
    // 映射
    @RequestMapping("/ajaxPojoToController")
    public String ajaxPojoToController(@RequestBody User user) {
        System.out.println("controller pojo :" + user);
        return "page.jsp";
    }

    @RequestMapping("/ajaxListToController")
    public String ajaxListToController(@RequestBody List<User> list) {
        System.out.println("controller list :" + list);
        return "page.jsp";
    }

    //使用注解@ResponseBody可以将返回的页面不进行解析，直接返回字符串，该注解可以添加到方法上方或返回值前面
    @RequestMapping("/ajaxReturnString")
    @ResponseBody
    public String ajaxReturnString() {
        System.out.println("controller  return string ...");
        return "page.jsp";
    }

    @RequestMapping("/ajaxReturnJson")
    @ResponseBody
    //基于jackon技术，使用@ResponseBody注解可以将返回的POJO对象转成json格式数据
    public User ajaxReturnJson() {
        System.out.println("controller  return json ...");
        User user1 = new User();
        user1.setName("name");
        user1.setAge(111);
        return user1;
    }

    @RequestMapping("/ajaxReturnJsonList")
    @ResponseBody
    //基于jackon技术，使用@ResponseBody注解可以将返回的保存POJO对象的集合转成json数组格式数据
    public ArrayList<User> ajaxReturnJsonList() {
        System.out.println("controller  return json list ...");
        User user = new User();
        user.setName("name");
        user.setAge(111);
        User user1 = new User();
        user1.setName("name");
        user1.setAge(111);
        ArrayList<User> users = new ArrayList<>();
        users.add(user);
        users.add(user1);
        return users;
    }

    @RequestMapping("/cross")
    @ResponseBody
    //使用@CrossOrigin开启跨域访问
    //标注在处理器方法上方表示该方法支持跨域访问
    //标注在处理器类上方表示该处理器类中的所有处理器方法均支持跨域访问
    @CrossOrigin
    //accept crossOriginrequestAccept
    public User cross() {
        System.out.println("controller  return 跨域 ...");
        User user1 = new User();
        user1.setName("name");
        user1.setAge(111);
        return user1;
    }
}
